import { createRouter, createWebHashHistory } from 'vue-router'
// 如 先导入 后使用，先将所有的组件 都执行了一次
import Login from '@/views/login/Login.vue'
import Layout from '@/views/layout/Layout.vue'

const routes = [
    {
        path: '/',
        redirect: '/login'
    },
    {
        path: '/login',
        component: Login
    },
    // 首页模块
    {
        path: '/layout',
        component: Layout,
        redirect: '/home',
        // 路由元信息,可以·自定义
        meta:{
            title:'首页',
            unshow: true
        },
        children: [
            {
                path: '/home',
                //路由懒加载 
                // 只有访问这个路由时 ，才导入|运行对应的组件
                // 项目逇第一个页面需要 提升加载速度，懒加载必须处理 
                // 如果需要当页面需要提升访问速度，不能做懒加载
                component: () => import('@/views/home/Home.vue'),
                meta:{
                    title:'首页'
                },
            }
        ]
    },
    //   账号模块
    {
        path: '/account',
        component: Layout,
        redirect: '/accountList',
        meta:{
            title: '账号管理'
        },
        children: [
            {
                path: '/accountList',
                component: () => import('@/views/account/AccountList.vue'),
                meta:{
                    title: '账号列表'
                }
            },
            {
                path: '/accountAdd',
                component: () => import('@/views/account/AccountAdd.vue'),
                meta:{
                    title: '添加账号'
                }
            },
            {
                path: '/accountCenter',
                component: () => import('@/views/account/AccountCenter.vue'),
                meta:{
                    title: '个人中心'
                }
            },
            {
                path: '/accountEdit',
                component: () => import('@/views/account/AccountEdit.vue'),
                meta:{
                    title: '修改密码'
                }
            }
        ]
    },
    //   商品模块
    {
        path: '/goods',
        component: Layout,
        redirect: '/goodsList',
        meta:{
            title: '商品管理'
        },
        children: [
            {
                path: '/goodsList',
                component: () => import('@/views/goods/GoodsList.vue'),
                meta:{
                    title: '商品列表'
                }
            },
            {
                path: '/goodsAdd',
                component: () => import('@/views/goods/GoodsAdd.vue'),
                meta:{
                    title: '商品添加'
                }
            },
            {
                path: '/goodsType',
                component: () => import('@/views/goods/GoodsType.vue'),
                meta:{
                    title: '商品分类'
                }
            },
                {
                    path: '/goodsEdit',
                    component: () => import('@/views/goods/GoodsEdit.vue'),
                    meta:{
                        title: '商品修改'
                    }
            }
        ]
    },
    //   订单模块
    {
        path: '/order',
        component: Layout,
        redirect: '/orderList',
        meta:{
            title: '订单管理',
            unshow: true, // 隐藏路由
        },
        children: [
            {
                path: '/orderList',
                component: () => import('@/views/order/OrderList.vue'),
                meta:{
                    title: '订单管理'
                },
            },
            {
                path: '/orderEdit',
                component: () => import('@/views/order/OrderEdit.vue'),
                meta:{
                    title: '商品修改'
                }
        }
        ]
    },
    //   店铺模块
    {
        path: '/shop',
        component: Layout,
        redirect: '/shopInfo',
        meta:{
            title: '店铺管理',
            unshow: true, // 隐藏路由
        },
        children: [
            {
                path: '/shopInfo',
                component: () => import('@/views/shop/ShopInfo.vue'),
                meta:{
                    title: '店铺管理'
                }
            }
        ]
    },
    //   统计模块
    {
        path: '/statistics',
        component: Layout,
        redirect: '/goodsStatistics',
        meta:{
            title: '统计数据'
        },
        children: [
            {
                path: '/goodsStatistics',
                component: () => import('@/views/statistics/GoodsStatistics.vue'),
                meta:{
                    title: '商品统计'
                }
            },
            {
                path: '/statisticsOrder',
                component: () => import('@/views/statistics/OrderStatistics.vue'),
                meta:{
                    title: '订单统计'
                }
            }
        ]
    },
    // 权限管理
    {
        path: '/permission',
        component: Layout,
        redirect: '/permissionInfo',
        meta:{
            title: '权限管理'
        },
        children: [
            {
                path: '/permissionInfo',
                component: () => import('@/views/permission/PermissionInfo.vue'),
                meta:{
                    title: '权限管理'
                }
            },
            {
                path: '/rolePermission',
                component: () => import('@/views/permission/RolePermission.vue'),
                meta:{
                    title: '角色管理'
                }
            }
        ]
    },
    {
        path: '/:pathMatch(.*)*', // 必须放在最后
        component: () => import('@/views/error/Error.vue')
    }
]

const router = createRouter({
    history: createWebHashHistory(),
    routes
})


// 路由前置守卫
// 如果用户没有登录  不能够访问 除（/login）之外的所有页面  
// 否则  用户已经登录 ，可以访问所有页面
router.beforeEach((to, from, next) => {
    let noToLogin = ['/login', '/register', '/404','resetPwd'] // 不需要登录的页面
    if(noToLogin.includes(to.path)){
        next()
    } else if(sessionStorage.getItem('user')){
        next()
    }else {
        next('/login');
    }
     //to: 要去的页面的信息
    //from: 从哪个页面来的信息
    // next: 放行函数   如果能够去这个页面  next()  如果不能去这个页面  next('/login')
    //next 是可选的  可以通过return true === next()     return false === next('/login')
})




export default router;